/**
 * TODO: Vložit licenci.
 */

package cz.enif.commander.sources;

/**
 * Definuje zdroj, ze kterého je možné číst.
 * 
 * @author enif
 *
 */
public interface ISource 
{
	/**
	 * Inicializuje vnitřní stav a připraví se na čtení ze zdroje.
	 * 
	 * @param input Vstup, ze kterého se má číst.
	 * 
	 * @return True při úspěchu, jinak false.
	 */
	boolean init(String input);
	
	/**
	 * Vrací další znak ze vstupu případně EOF (-1) na konci vstupu.
	 * 
	 * Pokud dojde k chybě při čtení, vrací EOF (-1) a automaticky
	 * uzavře vstup.
	 * 
	 * @return Znak ze vstupu případně EOF (-1) na konci vstupu.
	 * */
	int next();
	
	/**
	 * Uzavře zdroj pro další čtení. Další čtení vždy vrací -1 (EOF). 
	 * Zdroj lze reinicializovat voláním init(...).
	 * 
	 * <strong>Je nutné volat vždy, když se zdroj přestane používat!</strong>
	 */
	void close();
}
